package com.csdj.server.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.csdj.server.config.CustomAuthorityDeserializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.experimental.Accessors;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoubin
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_admin")
@ApiModel(value = "Admin对象", description = "")
public class Admin implements Serializable, UserDetails {
   @ApiModelProperty(value = "id")
   @TableId(value = "id", type = IdType.AUTO)
   private Integer id;
   @ApiModelProperty(value = "姓名")
   private String name;
   @ApiModelProperty(value = "手机号码")
    private String phone;
   @ApiModelProperty(value = "住宅电话")
   private String telephone;
   @ApiModelProperty(value = "联系地址")
   private String address;
   @ApiModelProperty(value = "是否启用")
   @Getter(AccessLevel.NONE)
   private Boolean enabled;
   @ApiModelProperty(value = "用户名")
   private String username;
   @ApiModelProperty(value = "密码")
   private String password;
   @ApiModelProperty(value = "用户头像")
   private String userFace;
   @ApiModelProperty(value = "备注")
   private String remark;
   @ApiModelProperty(value = "权限")
   @TableField(exist = false)
   private List<Role> roles;
   @Override
   @JsonDeserialize(using = CustomAuthorityDeserializer.class)
   public Collection<? extends GrantedAuthority> getAuthorities() {
      List<SimpleGrantedAuthority> authorities =
            roles.stream()
                 .map(role -> new SimpleGrantedAuthority(role.getName()))
                 .collect(Collectors.toList());
      return authorities;
   }
   @Override
   public boolean isAccountNonExpired() {
      return true;
   }
   @Override
   public boolean isAccountNonLocked() {
      return true;
   }
   @Override
   public boolean isCredentialsNonExpired() {
      return true;
   }
   @Override
   public boolean isEnabled() {
      return enabled;
   }
}
